今天會簡單介紹一些之後在文中可能會提到的專有名詞,雖然這次主題會牽涉到實作的 source code,但大部份內容還是需要搭配 RFC 的規格一起服用,才能把抽象的概念跟具體實作的 code 拼在一起,直接看 code 只能知道行為,不知道目的,根據範例慢慢 trace 研究起來會很沒有效率。
但這系列的文章應該是不用寫的跟 RFC 一樣嚴謹,所以筆者可能用字上有時候會用描述的,而不是硬性的用很多專有名詞來解釋,如果有用字不精準的地方敬請見諒,想要知道所有細節可以去啃完整的 RFC 當補充。
參與 QUIC 連線的實體,可以生成,接受,處理 QUIC 封包。 QUIC 中只有兩種 Endpoint,Client 及 Server。
發起連線的 QUIC 終端。
接收連線的 QUIC 終端。
可以被封裝在一個 UDP datagram 的完整 QUIC 單元。一個 UDP datagram 可以包含一個或多個 QUIC packet。
A unit of structured protocol information.
QUIC 定義的結構化協定資訊單元,QUIC 中有很多不同的 frame types,不同種類的 frame 格式不同,都有獨立的應用場景,在後續文章中常常會見到不同的 frame 代表著不同的意義。
一個 QUIC packet 中可以包含一個或多個 frame。
reference: https://docs.citrix.com/zh-cn/citrix-adc/13/system/http3-over-quic-protocol.html
整個 QUIC 的封包結構可以參考上圖去理解,一個 UDP datagram 可能封裝一個或多個 QUIC packet,每個 QUIC packet 又會包含一個或多個 frame。
一個不包含 ACK, PADDONG, CONNECTION_CLOSE frames 的 QUIC packet。 觸發接收端回傳一個 acknowledgment。
由 IP version, IP address, UDP port number 組成,代表一端的 network path。
用於辨識一個端點中 QUIC connection 的標識符。每個 endpoint 會為其對端選擇一個或多個 CID, 在發送封包給對端時,也會把 CID 包含其中,Connection ID 在對端是可見的。
在 QUIC 中傳輸有序位元組的單向或雙向通道。一個 Connection 可以同時開啟多個 Stream。
可能是上層的應用層協定,或者應用程式,其透過 QUIC 傳送/接收資料。
今天主要介紹了 RFC9000 文檔中最一開始介紹名詞的部份,定義了一些在後續規格書會大量提到的概念或名詞,如果直接跳到協定介紹的部份看會發現一直出現陌生的名詞,所以今天就先打好基底,把通用的名詞都簡單介紹一輪,讓後續的介紹可以更順利,有興趣的讀者也可以挑戰看看攻略 RFC 文檔,再搭配程式達到更好的學習目的。
明天會介紹一些 RFC9000 中描述 QUIC 的 Operation。因為 QUIC 本質上還是傳輸層協定,一般會被上層應用層協定的設計者使用,所以 QUIC 的 RFC 在描述時是透過應用層的角度去定義一些如果想要利用 QUIC 來傳輸資料會使用到的 Operations,概念上像是一組通用的 Interface。
幾乎大部份實作 QUIC 的 Library 都會參考這些 Operations 來設計,為了讓上層協定的應用者可以更方便利用 QUIC 作為底層協定,將來就算換了 Library 也可以照著同樣的邏輯去改寫。